package com.digua.base.socket

import com.digua.base.socket.response.ErrorResponse
import org.java_websocket.framing.Framedata

import java.nio.ByteBuffer


interface SocketListener {
    /**
     * 链接成功
     */
    fun onConnected()

    /**
     * 链接失败
     */
    fun onConnectFailed(e: Throwable?)

    /**
     * 链接断开
     */
    fun onDisconnect()

    /**
     * 数据发送失败
     *
     * @param errorResponse 失败响应
     */
    fun onSendDataError(errorResponse: ErrorResponse?)

    /**
     * 接收到文本消息
     *
     * @param message 文本消息
     * @param data    用户可将数据转成对应的泛型类型，可能为空，具体看用户在 [com.zhangke.websocket.dispatcher.IResponseDispatcher]
     * 中的实现，默认为空
     * @param <T>     IResponseDispatcher 中转换的泛型类型
    </T> */
    fun <T> onMessage(message: String, data: T?)

    /**
     * 接收到二进制消息
     *
     * @param bytes 二进制消息
     * @param data  用户可将数据转成对应的泛型类型，可能为空，具体看用户在 [com.zhangke.websocket.dispatcher.IResponseDispatcher]
     * 中的实现，默认为空
     * @param <T>   IResponseDispatcher 中转换的泛型类型
    </T> */
    fun <T> onMessage(bytes: ByteBuffer, data: T?)

    /**
     * 接收到 ping
     */
    fun onPing(framedata: Framedata?)

    /**
     * 接收到 pong
     */
    fun onPong(framedata: Framedata?)
}